import os
# 移除旧的 ZhipuAI 直接导入，因为客户端将通过 llm_manager 获取
# from zhipuai import ZhipuAI

# 使用相对导入
from .参数传入 import user_provided_elements_BOOK_TITLE # 只导入用户数据
from .llm_manager import get_llm_client # 导入新的LLM客户端获取函数
from .prompt_manager import get_active_prompt # 导入新的提示词加载函数

# --- 配置信息已移至 config.json 和 llm_manager.py ---
# ZHIPUAI_API_KEY = "..."
# MODEL_NAME = "..."

# --- 函数定义 ---

def generate_book_titles(llm_client, base_prompt: str, user_provided_elements: str) -> str:
    """
    调用配置好的大模型生成书名。

    参数:
        llm_client: 已初始化的LLM客户端实例 (来自llm_manager)。
        base_prompt (str): 从 prompt_manager 加载的激活的基础提示词。
        user_provided_elements (str): 用户输入的具体小说核心要素文本。

    返回:
        str: 模型生成的原始文本响应。如果发生错误，则返回错误信息。
    """
    try:
        # API Key 和模型名称现在由 llm_client 内部管理
        # client = ZhipuAI(api_key=api_key) # 旧代码

        final_prompt_content = f"{base_prompt}\n\n--- 用户提供的具体小说核心要素如下 ---\n{user_provided_elements}"

        messages = [
            {
                "role": "user",
                "content": final_prompt_content
            }
        ]

        # 使用通用的客户端接口调用
        response = llm_client.chat_completions_create(
            messages=messages,
            stream=False
            # 如果特定模型或任务需要，可以在config.json中定义并传递额外的参数 (如temperature, top_p)
            # 或者在调用时硬编码（但不推荐，除非该参数对所有模型都通用且固定）
            # temperature=0.7 # 示例
        )

        if response and hasattr(response, 'choices') and response.choices:
            generated_content = response.choices[0].message.content
            return generated_content
        else:
            # 记录更详细的响应信息以便调试
            print(f"[generate_book_titles] 模型响应无效或不包含有效choices。响应: {response}")
            return "模型未能生成有效内容，请检查API调用、提示词或模型响应结构。"

    except Exception as e:
        return f"调用API生成书名时发生错误: {e}"

# --- 主程序执行 ---
if __name__ == "__main__":
    TASK_NAME = "book_title"
    print(f"开始为任务 '{TASK_NAME}' 调用大模型生成书名 (通过LLM和Prompt管理器)...")

    try:
        # 通过任务名称从LLM管理器获取客户端
        # 任务名称 "book_title" 对应在 config.json -> task_model_mapping 中的配置
        llm_client_for_task = get_llm_client(TASK_NAME)
        active_prompt_for_task = get_active_prompt(TASK_NAME)
        print(f"使用模型配置: {llm_client_for_task.__class__.__name__} (模型: {getattr(llm_client_for_task, 'model_name', 'N/A')})")
        print(f"使用提示词 (部分预览):\n{active_prompt_for_task[:200]}...")

    except Exception as e:
        print(f"错误：无法初始化LLM客户端或加载提示词: {e}")
        # 退出或采取其他错误处理措施
        exit(1)

    # 使用从 参数传入.py 导入的 user_provided_elements_BOOK_TITLE
    user_novel_elements_input = user_provided_elements_BOOK_TITLE

    if not user_novel_elements_input.strip():
        print("\n警告：从 '参数传入.py' 加载的小说核心要素为空。模型将仅根据通用提示词进行生成，效果可能不佳。")
    else:
        print(f"用户输入的小说核心要素 (从 '参数传入.py' 加载，部分预览):\n{user_novel_elements_input[:200]}...")

    generated_titles_response = generate_book_titles(
        llm_client=llm_client_for_task,
        base_prompt=active_prompt_for_task,
        user_provided_elements=user_novel_elements_input
    )

    print("\n--- 模型原始输出 ---")
    print(generated_titles_response)
    print("--- 输出结束 ---")
